package cn.weforward.task;

import java.util.Date;
import java.util.List;

import cn.weforward.common.ResultPage;
import cn.weforward.data.UniteId;
import cn.weforward.framework.ApiException;
import cn.weforward.task.impl.SimpleBug;
import cn.weforward.task.impl.SimpleTag;
import cn.weforward.task.impl.SimpleTask;

public interface TaskService {
	/** 选项-无状态 */
	int OPTION_NONE = 0;
	
	/** 标签选项-显示中 */
	int OPTION_HIDE = 2;
	/** 标签选项-隐藏中 */
	int OPTION_SHOW = 1;
	
	/** 选项-评估中 */
	int OPTION_ASSESS = 1;
	/** 选项-规划中 */
	int OPTION_PLAN = 2;
	/** 选项-待开发 */
	int OPTION_GONNA_DEV = 3;
	/** 选项-开发中 */
	int OPTION_DEV = 4;
	/** 选项-待测试 */
	int OPTION_GONNA_TEST = 5;
	/** 选项-测试中 */
	int OPTION_TEST = 6;
	/** 选项-测试通过 */
	int OPTION_PASS_TEST = 7;
	/** 选项-已上线 */
	int OPTION_UP = 8;
	/** 选项-已拒绝 */
	int OPTION_REFUSE = 9;
	/** 选项-挂起 */
	int OPTION_HANGUP = 10;

	

	
	
	/**
	 * 新建一个标签
	 * @param name
	 * @param state
	 * @return
	 */
	Tag createTag(String name,int state);
	/**
	 * 搜索标签
	 * @param keywords
	 * @param options
	 * @return
	 */
	ResultPage<Tag> searchTags(String keywords,int options);
	/**
	 * 搜索所有标签
	 * @return
	 */
	ResultPage<SimpleTag> searchAllTags();
	/**
	 * 查询一个标签
	 * @param id
	 * @return
	 */
	Tag getTag(String id);
	/**
	 * 删除一个标签
	 * @param id
	 * @return
	 * @throws ApiException 
	 */
	void removeTag(String id) throws ApiException;
	
	/**
	 * 创建任务
	 * @param title
	 * @param content
	 * @param fatherTaskId
	 * @param manager
	 * @param handlers
	 * @param tag
	 * @param priority
	 * @param expectedStartTime
	 * @param expectedEndTime
	 * @return
	 */
	Task createTask(String title,String content,String fatherTaskId,String manager,
			List<String> handlers,String tag
			,int priority,Date expectedStartTime,Date expectedEndTime);
	/**
	 * 查询任务
	 * @param id
	 * @return
	 */
	Task getTask(String id);
	/**
	 * 查询所有任务
	 * @return
	 */
	ResultPage<SimpleTask> searchAllTasks();

	/**
	 * 搜索已完成的任务
	 * @param options
	 * @return
	 */
	ResultPage<SimpleTask> searchFinishedTasks(int options);
	/**
	 * 搜索未完成的任务
	 * @param options
	 * @return
	 */
	ResultPage<SimpleTask> searchUnfinishedTasks(int options);
	
	/**
	 * 搜索指定负责人已完成的任务
	 */
	public ResultPage<SimpleTask> findFinishedTaskByManager(String manager);
	/**
	 * 搜索指定负责人未完成的任务
	 */
	public ResultPage<SimpleTask> findUnfinishedTaskByManager(String manager);
	/**
	 * 搜索指定处理人已完成的任务
	 */
	public ResultPage<SimpleTask> findFinishedTaskByHandler(List<String> handlers);
	/**
	 * 搜索指定处理人未完成的任务
	 */
	public ResultPage<SimpleTask> findUnfinishedTaskByHandler(List<String> handlers);
	/**
	 * 搜索指定最新跟进人已完成的任务
	 */
	public ResultPage<SimpleTask> findFinishedTaskByFollower(String follower);
	/**
	 * 搜索指定最新跟进人未完成的任务
	 */
	public ResultPage<SimpleTask> findUnfinishedTaskByFollower(String follower);
	
	/**
	 * 查询bug
	 */
	Bug getBug(String id);
	

}
